<?php
/**
* Плагин автоматического определения или переключения языка
*/
class Nimblecms_Controller_Plugin_LocalizationRoute extends Zend_Controller_Plugin_Abstract {

	public function routeStartup(Zend_Controller_Request_Abstract $request) {
		$current_uri = $request->getRequestUri();
		$current_uri = rtrim($current_uri, '/');
		
		//Определяем язык по-умолчанию
		$locale = new Zend_Locale('auto');
		$current_lang = $locale->getLanguage();
		
		//получаем bootstrap
		$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
		//получаем список действующих локалей
		$locales = $bootstrap->getOption('locales');
		
		if(strpos(strtolower($current_uri) . '/', '/admin/') === false) {
			$paths    = explode('/', ltrim($request->getPathInfo(), '/'));
			$lang = array_shift($paths);
			if($lang != '' && array_key_exists($lang, $locales)) {
				$current_lang = $lang;
				//заносим в сессию
				$langNamespace = new Zend_Session_Namespace('site');
				$langNamespace->lang = $lang;
			} else {
				$paths    = explode('/', ltrim($request->getPathInfo(), '/'));
				//проверяем сессионную переменную языка
				$langNamespace = new Zend_Session_Namespace('site');
				if(isset($langNamespace->lang)) {
					$current_lang = $langNamespace->lang;
				} else {
					//ставим язык по-умолчанию
					$keys_locales = array_keys($locales);
					$current_lang = $keys_locales[0];
					//и заносим в сессию
					//$langNamespace = new Zend_Session_Namespace('site');
					//$langNamespace->lang = $lang;
				}
			}
		} else {
			$paths = explode('/', ltrim($request->getPathInfo(), '/'));
			$keys_locales = array_keys($locales);
			$current_lang = $keys_locales[0];
		}

		//устанавливаем язык в переменную
		$request->setParam('lang', $current_lang);
		
		//устанавливаем переменную в вид
		$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
		if (null === $viewRenderer->view) {
			$viewRenderer->initView();
		}
		$view = $viewRenderer->view;
		
		$view->LANG = $current_lang;
		
		$bootstrap->bootstrap('Translate');
		$translate = $bootstrap->getResource('Translate');
		
		$translate->setLocale($current_lang);
		
		//Zend_Debug::dump($locales[$current_lang]);

		//устанавливаем путь
		
		$path = implode('/', $paths);
		if ('' == $path) {
			$path = '/';
		}
		//$path = '/' . $current_lang . $path;
		$request->setPathInfo($path);
	}
}